const { v4 } = require('uuid');
const jwt = require('jsonwebtoken');

// 密钥
const secrect = v4();
const cookieKey = "token"

/**
 * 颁发jwt
 * @param {res} res 
 * @param {过期时间} maxAge  默认过期时间一天
 * @param {其他属性} info 
 */
exports.publish = function (res, maxAge = 86400000, info = {}) {
    const token = jwt.sign(info, secrect, {
        expiresIn: maxAge
    })
    // 添加到cookie
    res.cookie(cookieKey, token, {
        maxAge: maxAge,
        path: "/"
    })
    // 添加其他传输,考虑其他设备
    res.header("authorization", token);
}

/**
 * 验证jwt
 * @param {req} req 
 */
exports.verify = function (req) {
    // 尝试从cookie中获取
    let token = req.cookies[cookieKey];
    if (!token) {
        // 表示从cookie中没有获取到token值
        // 从authorization 获取token值
        token = req.header.authorization;
        if (!token) {
            // 没有token
            return null;
        }
        // 传过来authorization的格式
        // authorization:bearer token 
    }
    token = token.split(" ");
    token = token.length === 1 ? token[0] : token[1];
    try {
        const result = jwt.verify(token, secrect);
        return result;
    } catch {
        // 验证失败
        return null;
    }
}